/**
 * @description 链接用户 controller
 * @date 2020-07-14 15:17
 * @author LI
 */

const {
  getDeductionRecordList,
  createShopAddress,
  getShopAddress,
  updateShopNameById
} = require('../services/linkUser')
const jwt = require('jsonwebtoken')
const util = require('util')
const verify = util.promisify(jwt.verify)
const { ReturnResult } = require('../model/ResultModel')

const { JWT_SECRET_KEY } = require('../conf/secretKeys')

/**
 * 获取链接用户的扣款记录
 * @param {object} ctx 上下文
 * @param {date} startTime 开始时间
 * @param {date} endTime 结束时间
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getDeductionRecords({ ctx, startTime, endTime, page, limit }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const token = ctx.header.authorization
    const payload = await verify(token.split(' ')[1], JWT_SECRET_KEY)
    const id = payload.id
    const result = await getDeductionRecordList({ startTime, endTime, page, limit, id })
    return new ReturnResult(result.count, result.rows, true, "查询成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "查询失败，请重试")
  }
}

/**
 * 链接用户添加店铺地址
 * @param {number} id 链接用户 id
 * @param {string} companyAddress 店铺地址
 */
async function AddShopAddress(id, companyAddress) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await createShopAddress(id, companyAddress)
    return new ReturnResult(0, result, true, "添加成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "添加失败，请重试")
  }
}

/**
 * 获取链接用户店铺地址
 * @param {number} id
 * @returns {Promise<any>}
 */
async function getUserShopAddress(id) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await getShopAddress(id)
    return new ReturnResult(0, result, true, "成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "失败，请重试")
  }
}

/**
 * 修改店铺名称
 * @param {number} id 链接用户 id
 * @param {string} name 店铺名称
 */
async function updateShopName(id, name) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await updateShopNameById(id, name)
    return new ReturnResult(0, result, true, "成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "失败，请重试")
  }
}

module.exports = {
  getDeductionRecords,
  AddShopAddress,
  getUserShopAddress,
  updateShopName
}
